package com.bosssoft.g1.common.exception.parse;

/**
 * 自定义运行时异常类，用于处理业务异常情况
 * 解决什么问题：
 * 该类用于捕获并处理业务层面的异常情况，提供更加友好的异常信息展示，并可根据具体业务需求定制异常处理逻辑。
 * 注意事项：
 * - 该异常类应该尽量在业务逻辑层面使用，用于抛出业务异常。
 * - 可根据具体业务场景自定义异常信息和异常代码。
 * - 异常信息应该尽量清晰明了，便于后续定位和处理异常。
 * - 尽量避免在控制层面抛出此异常，应该转换为对应的 HTTP 状态码并返回给前端。
 * - 如果需要捕获并处理该异常，建议通过全局异常处理器进行统一处理。
 * @className: RRException
 * @description: 自定义运行时异常类
 * @author: YuXingZh
 * @date: 28/5/2024 上午9:09
 * @since 1.0
 **/
public class CustomException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    private String msg;
    private int code = 500;

    /**
     * 构造方法，用指定的异常信息初始化异常对象。
     *
     * @param msg 异常信息
     */
    public CustomException(String msg) {
        super(msg);
        this.msg = msg;
    }

    /**
     * 构造方法，用指定的异常信息和原始异常对象初始化异常对象。
     *
     * @param msg 异常信息
     * @param e   原始异常对象
     */
    public CustomException(String msg, Throwable e) {
        super(msg, e);
        this.msg = msg;
    }

    /**
     * 构造方法，用指定的异常信息和异常代码初始化异常对象。
     *
     * @param msg  异常信息
     * @param code 异常代码
     */
    public CustomException(String msg, int code) {
        super(msg);
        this.msg = msg;
        this.code = code;
    }

    /**
     * 构造方法，用指定的异常信息、异常代码和原始异常对象初始化异常对象。
     *
     * @param msg  异常信息
     * @param code 异常代码
     * @param e    原始异常对象
     */
    public CustomException(String msg, int code, Throwable e) {
        super(msg, e);
        this.msg = msg;
        this.code = code;
    }

    /**
     * 获取异常信息。
     *
     * @return 异常信息
     */
    public String getMsg() {
        return msg;
    }

    /**
     * 设置异常信息。
     *
     * @param msg 异常信息
     */
    public void setMsg(String msg) {
        this.msg = msg;
    }

    /**
     * 获取异常代码。
     *
     * @return 异常代码
     */
    public int getCode() {
        return code;
    }

    /**
     * 设置异常代码。
     *
     * @param code 异常代码
     */
    public void setCode(int code) {
        this.code = code;
    }
}
